package com.mmy.service.scenic.impl;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mmy.controller.UtilConstants;
import com.mmy.dao.scenic.TScenicPlanRepository;
import com.mmy.dao.scenic.VScenicOrderRepository;
import com.mmy.dao.scenic.VScenicPlanRepository;
import com.mmy.domain.scenic.TScenicPlan;
import com.mmy.domain.scenic.VScenicOrder;
import com.mmy.domain.scenic.VScenicPlan;
import com.mmy.domain.sys.TSysUser;
import com.mmy.service.ServiceCommon;

@Service
public class ScenicPlanServiceImpl {
	@Autowired
	VScenicPlanRepository vScenicPlanRepository;
	@Autowired
	ServiceCommon common;
	@Autowired
	TScenicPlanRepository tScenicPlanRepository;
	@Autowired
	VScenicOrderRepository vScenicOrderRepository;

	/**
	 * 通过计划单ID查询
	 *
	 * @author 创建人 hanxl 整理
	 * @date 创建日期 2020.10.29
	 */
	public VScenicPlan findByID(int iPlanID) {

		return vScenicPlanRepository.findByID(iPlanID);
	}

	/**
	 * 后台进入景区计划页面
	 * 
	 * 通过景区ID查询
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.28
	 */
	public List<VScenicPlan> findByScenicID(String pageNumber, String pageSize, String strScenicID) {
		int iPageSize = 0;
		int iTempPageNo = 0;
		if (pageNumber == null) {
			pageNumber = "1";
		}
		if (pageSize == null) {
			iPageSize = 20;
		} else {
			iPageSize = Integer.valueOf(pageSize);
			iTempPageNo = (Integer.valueOf(pageNumber) - 1) * iPageSize;
		}
		int iScenicID = Integer.valueOf(strScenicID);
		List<VScenicPlan> lstScenicPlan = vScenicPlanRepository.findByScenic(iScenicID, iTempPageNo, iPageSize);
		return lstScenicPlan;

	}

	/**
	 * 后台进入计划页面 分页
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.28
	 */
	public HashMap<String, Integer> mapScenicPlan(String pageNumber, String pageSize, String strScenicID) {
		int iScenicID = Integer.valueOf(strScenicID);
		HashMap<String, Integer> mapPage = common.getPage(pageNumber, pageSize,
				vScenicPlanRepository.countByScenicID(iScenicID));

		return mapPage;
	}

	/**
	 * 后台创建景区计划
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.01.25
	 */
	public void createScenicPlan(TScenicPlan tScenicPlan, String strStartDate, String strEndDate,
			TSysUser sessionSysUser) {
		// 获取计划最大编号
		int iPlanID = common.createPlanCode(UtilConstants.TableName.T_SCENIC_PLAN);
		tScenicPlan.setPlanID(iPlanID);
		Calendar calStartDate = Calendar.getInstance();
		calStartDate.setTime(common.formatDate(strStartDate, UtilConstants.DateStyle.YYYY_MM_DD));
		calStartDate.set(Calendar.HOUR_OF_DAY, 0);
		calStartDate.set(Calendar.MINUTE, 0);
		calStartDate.set(Calendar.SECOND, 0);
		calStartDate.set(Calendar.MILLISECOND, 1);
		tScenicPlan.setStartDate(calStartDate.getTime());
		Calendar calEndDate = Calendar.getInstance();
		calEndDate.setTime(common.formatDate(strEndDate, UtilConstants.DateStyle.YYYY_MM_DD));
		calEndDate.set(Calendar.HOUR_OF_DAY, 23);
		calEndDate.set(Calendar.MINUTE, 59);
		calEndDate.set(Calendar.SECOND, 59);
		tScenicPlan.setEndDate(calEndDate.getTime());
		tScenicPlan.setCreateDate(new Date());
		tScenicPlan.setCreator(sessionSysUser.getUserName());
		tScenicPlanRepository.save(tScenicPlan.getPlanID());
		tScenicPlanRepository.save(tScenicPlan);
	}

	/**
	 * 获取计划单最大编码
	 * 
	 * @return 返回值说明 计划单编码
	 * @author 创建人 dingxd
	 * @date 创建日期 2020.11.16
	 */
	public String getMaxPlanID() {
		// 返回计划单最大编码
		Object objCode = tScenicPlanRepository.getMaxPlanID();
		String strPlanID = "";
		if (objCode != null) {
			strPlanID = objCode.toString();
		}
		return strPlanID;
	}

	/**
	 * 后台修改景区计划信息
	 * 
	 * 通过计划ID查询
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.28
	 */
	public TScenicPlan findByPlanID(String strPlanID) {
		int iPlanID = Integer.parseInt(strPlanID);
		return tScenicPlanRepository.findByPlanID(iPlanID);
	}

	public void updateScenicPlan(TScenicPlan tScenicPlan, String strStartDate, String strEndDate,
			TSysUser sessionSysUser) {
		// 定义一个新的实体类对象
		TScenicPlan dbScenicPlan = tScenicPlanRepository.findByPlanID(tScenicPlan.getPlanID());
		dbScenicPlan.setTicketName(tScenicPlan.getTicketName());
		dbScenicPlan.setScenicID(tScenicPlan.getScenicID());
		Calendar calStartDate = Calendar.getInstance();
		calStartDate.setTime(common.formatDate(strStartDate, UtilConstants.DateStyle.YYYY_MM_DD));
		calStartDate.set(Calendar.HOUR_OF_DAY, 0);
		calStartDate.set(Calendar.MINUTE, 0);
		calStartDate.set(Calendar.SECOND, 0);
		calStartDate.set(Calendar.MILLISECOND, 1);
		dbScenicPlan.setStartDate(calStartDate.getTime());
		Calendar calEndDate = Calendar.getInstance();
		calEndDate.setTime(common.formatDate(strEndDate, UtilConstants.DateStyle.YYYY_MM_DD));
		calEndDate.set(Calendar.HOUR_OF_DAY, 23);
		calEndDate.set(Calendar.MINUTE, 59);
		calEndDate.set(Calendar.SECOND, 59);
		dbScenicPlan.setEndDate(calEndDate.getTime());
		dbScenicPlan.setFloor(tScenicPlan.getFloor());
		dbScenicPlan.setPeer(tScenicPlan.getPeer());
		dbScenicPlan.setPrice(tScenicPlan.getPrice());
		dbScenicPlan.setNumber(tScenicPlan.getNumber());
		dbScenicPlan.setMemo(tScenicPlan.getMemo());
		dbScenicPlan.setModifyDate(new Date());
		dbScenicPlan.setReviser(sessionSysUser.getUserName());
		tScenicPlanRepository.save(dbScenicPlan);

	}

	/**
	 * 后台删除景区计划信息
	 * 
	 *
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.12.28
	 */
	public Map<String, Object> delScenicPlan(String checkList) {
		String[] checklist = checkList.split(",");
		List<Integer> lstPlanID = new ArrayList<>();
		List<String> lstTicketName = new ArrayList<>();
		Map<String, Object> map = new HashMap<>();
		for (String str : checklist) {
			int iPlanID = Integer.parseInt(str);
			// 通过景区ID查询是否有订单信息包括预留和订单和取消的订单
			List<VScenicOrder> lstScenicOrder = vScenicOrderRepository.findByPlanID(iPlanID);
			if (lstScenicOrder.size() == 0) {
				lstPlanID.add(iPlanID);
				TScenicPlan dbScenicPlan = tScenicPlanRepository.findByPlanID(iPlanID);
				lstTicketName.add(dbScenicPlan.getTicketName());
			}
		}
		map.put("lstTicketName", lstTicketName);
		// 删除没有订单的景区计划再删除景区信息
		tScenicPlanRepository.delScenicPlan(lstPlanID);

		return map;

	}

	/**
	 * 前台景区菜单首页显示查询计划日期大于当前日期的景区ID
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.01.13
	 */
	public List<Integer> getScenicID(String strScenicPrice1, String strScenicPrice2) {
		if (strScenicPrice1 == null) {
			strScenicPrice1 = "";
		}
		if (strScenicPrice2 == null) {
			strScenicPrice2 = "";
		}
		List<Integer> lstScenicID = tScenicPlanRepository.getScenicID(strScenicPrice1, strScenicPrice2);
		return lstScenicID;
	}

	/**
	 * 前台景区菜单首页显示查询这些景区ID的计划日期大于当前日期的计划最小价格
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.01.13
	 */
	public List<VScenicPlan> getMinPrice() {
		List<VScenicPlan> lstScenicPlan = vScenicPlanRepository.getMinPrice();
		return lstScenicPlan;
	}

	/**
	 * 通过景区ID查询
	 *
	 * 后台查询该景区详细信息时用到 以开始时间倒序
	 * 
	 * @author 修改人 hanxl
	 * @date 创建日期2021.01.14
	 */
	public List<VScenicPlan> getByScenicID(String strScenicID) {
		int iScenicID = Integer.valueOf(strScenicID);
		List<VScenicPlan> lstScenicPlan = vScenicPlanRepository.getByScenic(iScenicID);
		return lstScenicPlan;

	}

	/**
	 * 查询该景区时间在计划日期内的计划
	 * 
	 * @author 修改人 hanxl
	 * @date 创建日期2021.01.14
	 */
	public List<VScenicPlan> findPlanValid(String strScenicID) {
		int iScenicID = Integer.valueOf(strScenicID);
		List<VScenicPlan> lstScenicPlan = vScenicPlanRepository.findPlanValid(iScenicID);
		return lstScenicPlan;
	}

	/**
	 * 函数功能说明：通过景区ID和时间查询：当天的计划单
	 *
	 * @param 参数说明
	 * @return 返回值说明 list
	 * @throws 异常处理说明
	 * @author 创建人hanxl
	 * @param strNowDate
	 * @date 创建日期 2021.1.15
	 */
	public List<Map<String, Object>> findPlanValidMap(int iScenicID, String strNowDate) {
		return vScenicPlanRepository.findPlanValidMap(iScenicID, strNowDate);
	}

}
